const WebSocket = require('ws');

// 测试配置
const WS_URL = 'ws://localhost:3001';
const TEST_MESSAGES = [
    // 测试区频道消息 (t: 1)
    { c: 260, d: { t: 1, c: "大家好，我是新手，请多关照！" } },

    // 测试帮派频道消息 (t: 4) 
    { c: 260, d: { t: 4, c: "帮派收人，有意者私聊" } },

    // 测试商屏消息 (t: 5)
    { c: 260, d: { t: 5, c: "出售金币，价格优惠，有意者私聊" } },

    // 测试不支持的消息类型 (t: 2) - 应该返回错误
    { c: 260, d: { t: 2, c: "这条消息应该被拒绝" } },

    // 测试空消息内容 - 应该返回错误
    { c: 260, d: { t: 1, c: "" } },

    // 测试消息类型为空 - 应该返回错误
    { c: 260, d: { t: null, c: "消息类型为空" } },

    // 测试超长消息 - 应该返回错误
    { c: 260, d: { t: 1, c: "a".repeat(501) } }
];

let ws;
let messageIndex = 0;

function connect() {
    console.log('🔌 连接到WebSocket服务器...');

    ws = new WebSocket(WS_URL);

    ws.on('open', () => {
        console.log('✅ WebSocket连接已建立');
        console.log('📤 开始发送测试消息...\n');

        // 发送第一条测试消息
        sendNextMessage();
    });

    ws.on('message', (data) => {
        try {
            const response = JSON.parse(data.toString());
            console.log(`📥 收到响应: ${JSON.stringify(response, null, 2)}`);

            // 检查响应
            if (response.act_id === 260) {
                if (response.code === 0) {
                    console.log('✅ 消息发送成功\n');
                } else {
                    console.log(`❌ 消息发送失败: ${response.msg}\n`);
                }
            }

            // 发送下一条测试消息
            setTimeout(() => {
                sendNextMessage();
            }, 1000);

        } catch (error) {
            console.error('❌ 解析响应失败:', error);
        }
    });

    ws.on('error', (error) => {
        console.error('❌ WebSocket错误:', error);
    });

    ws.on('close', () => {
        console.log('🔌 WebSocket连接已关闭');
    });
}

function sendNextMessage() {
    if (messageIndex >= TEST_MESSAGES.length) {
        console.log('🎉 所有测试消息发送完成！');
        ws.close();
        return;
    }

    const message = TEST_MESSAGES[messageIndex];
    const messageType = message.d.t;
    const content = message.d.c;

    console.log(`📤 发送测试消息 ${messageIndex + 1}/${TEST_MESSAGES.length}:`);
    console.log(`   类型: ${messageType} (${getMessageTypeName(messageType)})`);
    console.log(`   内容: ${content}`);

    ws.send(JSON.stringify(message));
    messageIndex++;
}

function getMessageTypeName(type) {
    switch (type) {
        case 1: return '区频道消息';
        case 4: return '帮派频道消息';
        case 5: return '商屏消息';
        default: return '未知类型';
    }
}

// 启动测试
connect();

// 处理程序退出
process.on('SIGINT', () => {
    console.log('\n🛑 测试被中断');
    if (ws) {
        ws.close();
    }
    process.exit(0);
});

process.on('SIGTERM', () => {
    console.log('\n🛑 测试被终止');
    if (ws) {
        ws.close();
    }
    process.exit(0);
});
